package servidor.gerenciadorsalasjogo.so;

import java.rmi.RemoteException;
import java.util.List;

import comum.rn.RNDescricaoSalaJogo;
import comum.rn.RNInfoSalaJogo;
import comum.rn.RNJogada;
import comum.so.exception.SalaCheiaException;
import comum.so.exception.SalaComNomeJaExistenteException;
import comum.so.exception.SalaNaoExisteException;
import comum.so.exception.SenhaIncorretaException;

public interface SOGerenciadorSalasJogoEntrada {
	List<RNDescricaoSalaJogo> buscarSalasJogo(boolean mostrarCheios,
			boolean mostrarSenha);

	RNInfoSalaJogo entrarSalaJogo(String identificador, Long idSalaJogo,
			String senha) throws SalaCheiaException, SalaNaoExisteException,
			SenhaIncorretaException;

	RNInfoSalaJogo criarSalaJogo(String nome, String senha, String identificador)
			throws SalaComNomeJaExistenteException;

	void sairSalaEspera(Long idSalaJogo, String identificador);

	boolean entrarMesa(int posicaoDesejada, Long idSalaJogo,
			String identificador);

	void sairMesa(Long idSalaJogo, String identificador);

	void fazerJogada(String jogadorQueJogou, Long idSalaJogo, RNJogada jogada);

	void desistirJogo(Long idSalaJogo, String identificador)
			throws RemoteException;

	void iniciarPartida(Long idSalaJogo);

}
